package com.mes.cloud.dao;

import com.mes.cloud.api.dto.request.organization.BaseChannelCustomerRequest;
import com.mes.cloud.entity.BaseChannel;
import com.mes.cloud.entity.SysOrganizationChannel;
import com.mes.cloud.entity.SysPositionChannelType;
import com.mes.cloud.entity.vo.organization.BaseChannelVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;

import java.util.List;
import java.util.Set;

/**
 * 渠道定义
 *
 * @author ysd
 * @email shaodong.yuan@pactera.com
 * @version 2019-08-20 15:48:07
 */
public interface BaseChannelDao  extends SelectByIdsMapper<BaseChannel>, Mapper<BaseChannel>{
    /**
     * @Author ysd
     * @Description 查询所有渠道
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannel> findAllBassChannel(BaseChannel baseChannel);

    /**
     * @Author ysd
     * @Description 查询所有渠道(关联组织）
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannel> findAllChannelByOragId(SysOrganizationChannel sysOrganizationChannel);

    /**
     * @Author ysd
     * @Description 查询所有渠道(关联岗位）
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannel> findAllChannelByPositId(SysPositionChannelType sysPositionChannelType);

    /**
     * @Author ysd
     * @Description 查询详情
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannelVo> findCustomerChannelListByIds(BaseChannelCustomerRequest customerChannelRequest);

    /**
     * @Author ysd
     * @Description 网络覆盖区域_渠道属性
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannelVo> findCustomerChannelType(@Param("channelIds") List<String> channelIds);

    /**
     * @Author ysd
     * @Description 客户详情_渠道树
     * @Date 11:01 2019/9/5
     **/
    List<BaseChannel> findChannelListByCustomerId(@Param("channelIds") List<String> channelIds);

    /**
     * 查询下级客户类型
     * @param channelIds
     * @return List<String>
     */
    List<String> findChildrenCustomerType(List<String> channelIds);

    /**
     * 查询上级客户类型
     * @param channelIds
     * @return
     */
    List<String> findParentCustomerType(List<String> channelIds);

    /**
     * 通过ids集合查询获得上级渠道id集合
     * @param channelIds
     * @return JsonResult<List<String>>
     */
    List<String> findChannelIdsByIds(List<String> channelIds);

    /**
     * 渠道的List集合
     * @param setChanelId
     * @return
     */
    List<BaseChannel> findChannelByIds(@Param("setChanelId") Set<String> setChanelId);

    /**
     * 查询子节点
     * @param id
     * @return
     */
    List<String> findChildrenIdsById(String id);

    /**
     * 查询客户渠道列表
     * @param baseChannelCustomerRequest
     * @return List<String>
     */
    List<String> findBaseChannelList(BaseChannelCustomerRequest baseChannelCustomerRequest);

    /**
     * 查询上级渠道属性
     * @param channelIds
     * @return
     */
    List<String> findParentType(List<String> channelIds);

    BaseChannel findParent(BaseChannelCustomerRequest baseChannelCustomerRequest);

}
